8.03 创建模型类
创建模型类之前需要配置好使用那个数据库
指定数据库,使用orm需要在配置文件中指定使用哪个库
创建模型类:
在django中创建模型非常简单(django内部做了很多工作,使用者只需要简单调用即可),使用的时候,只经继承模型基类,然后定义字段即可,这部份代码写在每个应用下面的mode.py文件内。
模型类都要继承models.Model
类下面的每个字段都对应数据库中的表字段及其字段类型,约束条件等。
在终端输入以下命令行:
Python .\manage.py startapp app08
在django=>shn=>shn=>sttings.py下面设置配置文件
1)在
from pathlib import Path
后面插入:
import pymysql
pymysql.install_as_MySQLdb()
2)在instlled_apps里面注册app08
INSTALLED_APPS = [
"app08",
3)在database里面配置模块驱动参数:
DATABASES = {
#'default': {
#'ENGINE': 'django.db.backends.sqlite3',
#'NAME': BASE_DIR / 'db.sqlite3',
default': {
ENGINE':'django.db.backends.mysql',
NAME':'app08', #在mysql中自己预先创建好数据库app08
USER':'root',
PASSWORD':'502',
HOST':'127.0.0.1',
POST':3306,
CHARSET':'utf8',
}
}
mysql> create database app08;
Query OK, 1 row affected (0.02 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| app08 |
| bms |
| domo |
| first_database |
| information_schema |
| mysql |
| performance_schema |
| shn |
| sys |
+--------------------+
9 rows in set (0.00 sec)
在app08=>models里面创建模型数据:
from django.db import models
# Create your models here.
class User(models.Model) :# class里面做一些继承models.Model Model是一个基类,所有的user都要继承这个基类
id=models.AutoField(primary_key=True) #AutoField是一个自增功能,设置主键
useName=models.CharField(max_length=100)
passWord=models.CharField(max_length=100)
age=models.IntegerField()
birthDay=models.DateTimeField()
PS D:\Pyobject2023\object\django\shn> python .\manage.py makemigrations
返回结果:
Migrations for 'app08':
app08\migrations\0001_initial.py
- Create model User
PS D:\Pyobject2023\object\django\shn>
上述结果显示:会在app08\migrations\0001_initial.py里面生成一条记录;
0001_initial.py:
# Generated by Django 4.2.11 on 2024-12-01 09:36
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',
fields=[
('id', models.AutoField(primary_key=True, serialize=False)),
('useName', models.CharField(max_length=100)),
('passWord', models.CharField(max_length=100)),
('age', models.IntegerField()),
('birthDay', models.DateTimeField()),
],
),
根据上述记录执行命令如下:
PS D:\Pyobject2023\object\django\shn> python .\manage.py migrate
执行结果:
Operations to perform:
Apply all migrations: admin, app08, auth, contenttypes, sessions
Running migrations:
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying admin.0002_logentry_remove_auto_add... OK
Applying admin.0003_logentry_add_action_flag_choices... OK
Applying app08.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying auth.0007_alter_validators_add_error_messages... OK
Applying auth.0008_alter_user_username_max_length... OK
Applying auth.0009_alter_user_last_name_max_length... OK
Applying auth.0010_alter_group_name_max_length... OK
Applying auth.0011_update_proxy_permissions... OK
Applying auth.0012_alter_user_first_name_max_length... OK
Applying sessions.0001_initial... OK
App08数据库中多了很多表,除了app08_user表,其他表都是Django内置模块需要的表;
mysql> show tables;
+----------------------------+
| Tables_in_app08 |
+----------------------------+
| app08_user |
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
+----------------------------+
11 rows in set (0.00 sec)
mysql> show columns from app08_user;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int | NO | PRI | NULL | auto_increment |
| useName | varchar(100) | NO | | NULL | |
| passWord | varchar(100) | NO | | NULL | |
| age | int | NO | | NULL | |
| birthDay | datetime(6) | NO | | NULL | |
+----------+--------------+------+-----+---------+----------------+
5 rows in set (0.01 sec)
from django.db import models
# Create your models here.
class User(models.Model) :# class里面做一些继承models.Model Model是一个基类,所有的user都要继承这个基类
id=models.AutoField(primary_key=True) #AutoField是一个自增功能,设置主键
useName=models.CharField(max_length=100)
passWord=models.CharField(max_length=100)
age=models.IntegerField()
birthDay=models.DateTimeField()
class Meta:
db_table='user'
会生成一条记录:
Migrations for 'app08':
app08\migrations\0002_alter_user_table.py
- Rename table for user to user
python .\manage.py migrate
mysql> show tables;
+----------------------------+
| Tables_in_app08 |
+----------------------------+
| auth_group |
| auth_group_permissions |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_admin_log |
| django_content_type |
| django_migrations |
| django_session |
| user |
+----------------------------+
11 rows in set (0.00 sec)